// spdlog 异步用法样例
// 实际上同步日志和异步日志使用没什么区别
// 就是创建时的工厂不同

#include <iostream>
#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/async.h>


int main()
{
    // 初始化异步日志输出线程配置
    spdlog::init_thread_pool(3072,1);
    // 创建异步日志器 -- 工厂接口默认创建同步日志器
    auto logger = spdlog::stdout_color_mt<spdlog::async_factory>("default-logger"); // 标准输出日志器
    // auto logger = spdlog::basic_logger_mt<spdlog::async_factory>("file-logger", "./sync.log"); //文件输出日志器
    
    // 日志器的刷新策略，以及日志器的输出等级
    spdlog::flush_on(spdlog::level::level_enum::debug);
    spdlog::set_level(spdlog::level::level_enum::debug);

    //设置日志输出格式
    logger->set_pattern("[%n][%H:%M:%S][%t][%-8l - %v]");

    // 进行简单日志输出
    // 在异步日志中, 日志的输出并不是由主线程完成的, 而是由工作线程来输出
    // 所以看到的结果会先输出 "spdlog 演示完成"
    logger->trace("你好{}", "世界");
    logger->debug("你好{}", "世界");
    logger->info("你好{}", "世界");
    logger->warn("你好{}", "世界");
    logger->critical("你好{}", "世界");

    std::cout<< "spdlog 演示完成！"<<std::endl;
    return 0;
}